package com.example.mytest.annotation4;

import org.springframework.core.annotation.AliasFor;
import org.springframework.test.context.ContextConfiguration;

/**
 * @ClassName: GroovyOrXmlTestConfig
 * @Description: TODO 注解中的可传递隐性别名
 * @Author: 230689
 * @Date: 2021/9/8 17:49
 *
 * @Version: v1.0
 */
public @interface GroovyOrXmlTestConfig {

    // TODO:  groovy 和 xml 都指向  locations
    @AliasFor(annotation = MyTestConfig2.class, attribute = "groovyScripts")
    String[] groovy() default {};

    @AliasFor(annotation = ContextConfiguration.class, attribute = "locations")
    String[] xml() default {};
}

//
//如下所示:在GroovyOrXmlTestConfig中,groovy是对上面的MyTestConfig2中的groovyScripts属性显示的复写，
//        而xml是对@ContextConfiguration中locations属性的显示的复写，
//        我们就可以称groovy和xml是彼此的可传递隐性别名,因为它们实际上只是复写ContextConfiguration中的locations属性。
//
//
//
//        实现要求:
//        1.属于隐性别名组中的每一个属性必须使用@AliasFor进行注释,并且attribute必须引用相同元注解中的同一个属性
//          2.别名化的属性必须声明相同的返回类型
//          3.别名化的属性必须定义默认值
//          4.别名化的属性必须声明相同的默认值
//          5.注解必须引用合适的元注解
//          6.被引用的元注解必须放置在声明了@AliasFor的注解上
